﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Presentacion.Contrato.VU_04_Gestionar_Materia;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;

namespace vudu.Presentacion.Presentador.VU_04_Gestionar_Materia
{
    public class PresentadorAgregarMateria
    {
        public IContratoAgregarMateria _vista;
        private EnlaceLogico _fachada;
        String _nombre, _descripcion, _estado;
        int _teoria, _practica,_ncreditos;

        public PresentadorAgregarMateria(IContratoAgregarMateria vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;
        }

        public void AgregarMateria()
        {
            bool seAgrega = VerificarAgregar();
            if (seAgrega)
            {
                Materia aAgregar = CrearMateria(_nombre, _teoria, _practica, _descripcion, _estado,_ncreditos);
                int seAgrego = _fachada.AgregarMateria(aAgregar);
                if (seAgrego == 0)
                {
                    ocurreError("No es posible realizar la transaccion");
                }
                else
                    ocurreExito();
            }
            else
            {
                ocurreError("Los datos presentan errores");
            }
        }

        //Metodo que verifica si hay errores en los campos, si no hay devuelve true.

        public bool VerificarAgregar()
        {
            setEstado();
            int agregar = setNombre() * setTeoria() * setPractica() * setDescripcion();
            if (agregar == 1)
                return true;
            else
                return false;
        }

        public Materia CrearMateria(String nombre, int teoria, int practica, String descripcion, String estado,int creditos)
        {
            Materia materia = new Materia(0, nombre, teoria, practica, descripcion, estado,creditos);
            return materia;
        }

        #region Validaciones y obtencion de valores

        public int setNombre()
        {
            this._nombre = _vista.Nombre.Text;
            if ((_nombre.Length == 0) || (_nombre.Length > 50))
            {
                return 0;
            }
            else
                return 1;
        }

        public int setTeoria()
        {
            try
            {
                this._teoria = Int32.Parse(_vista.Teoria.Text);    
            }
            catch (Exception)
            {
                return 0;
            }
            if ((_teoria < 0) || (_teoria > 60))
                return 0;
            else
                return 1;
        }

        public int setPractica()
        {
            try
            {
                this._practica = Int32.Parse(_vista.Practica.Text);
            }
            catch (Exception)
            {
                return 0;
            }
            if ((_practica < 0) || (_practica > 60))
                return 0;
            else
                return 1;
        }

        public int setDescripcion()
        {
            this._descripcion = _vista.Descripcion.Text;
            if ((_descripcion.Length == 0) || (_descripcion.Length > 400))
            {
                return 0;
            }
            else
                return 1;
        }

        public void setEstado()
        {
            this._estado = _vista.Estado.SelectedItem.Text;
        }


        public int setNumCreditos()
        {
            try
            {
                this._ncreditos = Int32.Parse(_vista.Creditos.Text);
            }
            catch (Exception)
            {
                return 0;
            }
            if ((_ncreditos < 0) || (_ncreditos > 10))
                return 0;
            else
                return 1;
        }


        public void ocurreError(String info)
        {
            _vista.Error.Text = "Operacion Fallida: "+ info;
            _vista.Error.ForeColor = System.Drawing.Color.Red;
            _vista.Error.Visible = true;
        }

        public void ocurreExito()
        {
            _vista.Error.Text = "La materia se agrego con exito";
            _vista.Error.CssClass = "transaccionExitosa";
            _vista.Error.ForeColor = System.Drawing.Color.Green;
            _vista.Error.Visible = true;
        }

        #endregion Validaciones y obtencion de valores
    }
}